<?php

define('EDICIONES', 158);
define('EVALUACION', 151);
define('ASIGNACION', 150);
define('INCONFORMIDADES', 154);  //en el tool_helper hay un equivalene de esta constante



class Evaluacion extends CI_Controller
{
    
    function Evaluacion()
	{
        parent::__construct();
		date_default_timezone_set('America/El_Salvador');
		
		$this->load->helper('url');
		$this->load->helper('form');
		$this->load->model('seguridad_model');
		$this->load->model('factores_model');
		$this->load->model('evaluacion_model');
		$this->load->model('capacitacion_model');
		$this->load->library("mpdf");
		if(!$this->session->userdata('id_usuario')){
		 	redirect('index.php/sessiones');
		}
    }
	
	function index()
	{	
		
	 	

	}

	function ediciones($estado_transaccion=NULL,$accion=NULL)
	{	
		
		$data['id_modulo']=EDICIONES;
		consultar_permiso(EDICIONES);
				switch ($accion) {
			case 1:
				$data['msj']="La edición de evaluación ha sido guardada";
				break;
			case 2:
				$data['msj']="La edición de evaluación ha sido modificada";
				break;
			case 3:
				$data['msj']="La edición de evaluación ha sido eliminada";
				break;
			case 4:
				$data['msj']="La edición de evaluación ha sido activada";
				break;
			case 5:
				$data['msj']="La edición de evaluación ha sido detenida";
				break;
			case 6:
				$data['msj']="La edición de evaluación ha sido copiada";
				break;
			default:
				$data['msj']=NULL;
				break;
		}
		cargando();
		$data['estado_transaccion']=$estado_transaccion;
		$data['d']=	$this->evaluacion_model->ediciones();
		pantalla('evaluacion/ediciones', $data);
	}


function cambiar_estado($id_edicion=NULL, $estado=NULL)
{
	consultar_permiso(EDICIONES);
	$this->db->trans_start();	
		$this->evaluacion_model->cambiar_estado_edicion($id_edicion,$estado);
		$accion=5-$estado; //el mensaje 4 es activo y el mensaje 5 es denenido

	bitacora("Cambiado el estado de la edicion $id_edicion a $estado",4);		
	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/ediciones/'.$tr.'/'.$accion);
}

function eliminar_edicion($id_edicion=NULL)
{
	consultar_permiso(EDICIONES);
	$this->db->trans_start();	
	$this->evaluacion_model->eliminar_edicion($id_edicion);
	bitacora("Eliminación de la edicion $id_edicion ",5);		
			$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/ediciones/'.$tr.'/3');
}

function DM_edicion($id_edicion=0)
{
	consultar_permiso(EDICIONES);
	$data['categorias']=$this->evaluacion_model->detalle_edicion($id_edicion,TRUE); 
	$data['perfiles']=$this->factores_model->perfiles();
	$data['id_edicion']=$id_edicion;
	if ($id_edicion==0) {
		$data['titulo']="Nueva ";
		$data['nombre']="";
	} else {
		$data['titulo']="Modificar ";
		$data['nombre']=$this->evaluacion_model->ediciones($id_edicion);
		$data['nombre']=$data['nombre']['nombre'];
	}
	//prueba_v($data);
	$this->load->view('evaluacion/DM_edicion',$data);

}


function guardar_edicion()
{

	consultar_permiso(EDICIONES);
	$this->db->trans_start();			
	$categorias=$_POST['id_categoria'];
	$id_edicion=$_POST['id_edicion'];
	$perfiles=$_POST['perfil'];
	$edicion=$_POST['nombre'];
	if ($id_edicion==0) {
		$id_edicion=$this->evaluacion_model->guardar_edicion($_POST);		
		bitacora("Creación de la edicion: $edicion id_edicion  $id_edicion",3);
		$accion=1;
	} else {
		$accion=2;
		$this->evaluacion_model->actualizar_edicion($_POST);
		bitacora("Modificación de la edicion: $edicion id_edicion  $id_edicion",4);
	}
			for ($i=0; $i <sizeof($categorias) ; $i++) { 
				$info = array('id_categoria' => $categorias[$i],
							 'id_edicion'=>$id_edicion,
							 'id_perfil'=>$perfiles[$i]);
				$this->evaluacion_model->guardar_detalle_edicion($info);	
			}	//fin for
	
	
		
	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/ediciones/1/'.$tr.'/'.$accion);	
	
}

function asignacion($id_edicion=NULL, $estado_transaccion=NULL)
{
		
		$data['id_modulo']=ASIGNACION;
		$permiso=consultar_permiso(ASIGNACION);
		cargando();
		$data['estado_transaccion']=$estado_transaccion;			
		if ($estado_transaccion==1) {
			$data['msj']="Las asignaicones se han guardado correctamente";
		}

		if ($id_edicion==NULL) {
				$id_edicion=$this->evaluacion_model->edicion_activa();
		}
		if ($id_edicion==0) {
			die("No existe una evaluacion activa o selecionada");
		}else{	

			switch ($permiso) {
						case 3:
							//nivel administrador
								$data['evaluadores']=$this->evaluacion_model->empleados(1);
								$data['empleados']=$this->evaluacion_model->empleados(0);
								$data['no_asignados']=$this->evaluacion_model->empleados_no_asignados($id_edicion);
							break;
						case 1:
						case 2:
						case 4:													
							//nivel de seccion 
								$id_seccion=$this->session->userdata('id_seccion');
								$data['evaluadores']=$this->evaluacion_model->empleados(3,$id_seccion);
								$data['empleados']=$this->evaluacion_model->empleados(4,$id_seccion);
								$data['no_asignados']=$this->evaluacion_model->empleados_no_asignados($id_edicion,$id_seccion);
							break;
						default: break;

					}		
			$data['id_edicion']=$id_edicion;			
			//se mandan todos para evitar hacer muchas consultas a la base de datos
			$data['all_empleados']=json_encode($data['empleados']);  
			$data['asignados']=json_encode($this->evaluacion_model->empleados_asignados_en_edicion($id_edicion));  
			$data['no_asignados']= json_encode($data['no_asignados']);
			pantalla('evaluacion/asignacion',$data);
			//prueba_v($data);
		}
	
}
function guardar_asignacion()
{	
	
	extract($_POST);	
	$this->db->trans_start();
	
	if(isset($repetidos)) { //para quitar aquellos empleados que se le cambiaron los evaluadores
							//la eliminacion tiene que ser antes de meter los nuevos registros para evitar inconsistencia en la base o eliminar parte de los nuevos registros
		for ($i=0; $i <sizeof($repetidos) ; $i++) {
		 	$this->evaluacion_model->eliminar_asignacion2($repetidos[$i],$id_edicion); //
		 }
		 $ids=implode(',',$repetidos);
		 bitacora("Quitado(s) empleado(s) $ids para asignarlos a id_empleado $evaluador",5);
	}
		$ids=array();

	for ($i=0; $i <sizeof($asignaciones) ; $i++) { 
				if($evaluaciones[$i]==0){  //solo se ingresaran los nuevos registros
					$info = array('id_empleado' => $asignaciones[$i],
								 'id_edicion'=>$id_edicion,
								 'id_empleado_evaluador'=>$evaluador);
					$this->evaluacion_model->guardar_asignacion($info);	
					array_push($ids, $asignaciones[$i]);
				}
			}	//fin for
			$ids=implode(',', $ids);
		 bitacora("Agregado(s) empleado(s) $ids para ser evaluados por  id_empleado $evaluador",3);
	if (isset($eliminados)) {///eliminar los empleados que se le quito el evaluador, pero no se les asigno nadie mas 
		for ($i=0; $i <sizeof($eliminados) ; $i++) {
			if ($eliminados[$i]!=0) {
			 	$this->evaluacion_model->eliminar_asignacion($eliminados[$i]);
			 } 
								
		}		
	}

	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/asignacion/'.$id_edicion.'/'.$tr);
}
function empleados_asignados_json($id_empleado,$id_edicion)
{

	echo json_encode($this->evaluacion_model->empleados_asignados($id_empleado,$id_edicion));
}

function copiar_edicion($id_edicion)
{
		//general
	consultar_permiso(EDICIONES);
	$this->db->trans_start();
	$info=$this->evaluacion_model->ediciones($id_edicion);
	$info['nombre'].=" Copia ";
	$id_edicion_n=$this->evaluacion_model->guardar_edicion($info);
	$data['info']=$info;
			//copia de perfiles
	$categorias=$this->evaluacion_model->detalle_edicion($id_edicion,FALSE);
			foreach ($categorias as $key) {
			 	$info = array('id_categoria' => $key['id_categoria'],
							 'id_edicion'=>$id_edicion_n,
							 'id_perfil'=>$key['id_perfil']);
				$this->evaluacion_model->guardar_detalle_edicion($info);	
			 } 
			//copia de asignaciones
	$asignaciones= $this->evaluacion_model->empleados_asignados_en_edicion($id_edicion);
			foreach ($asignaciones as $key) {
				$info = array('id_empleado' => $key['id_empleado'],
								 'id_edicion'=>$id_edicion_n,
								 'id_empleado_evaluador'=>$key['id_empleado_evaluador']);
				$this->evaluacion_model->guardar_asignacion($info);

			}
	$data['categorias']=$categorias;
	$data['asignaciones']=$asignaciones;
	
	bitacora("Copiada edicion desde id_edicion $id_edicion  a id_edicion $id_edicion_n",3);

	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/ediciones/1/'.$tr.'/6');	
	
}
function realizar($estado_transaccion=NULL, $accion=NULL)
{
		$data['id_modulo']=EVALUACION;
		$id_permiso=consultar_permiso(EVALUACION);		
		$id_edicion=$this->evaluacion_model->edicion_activa();
		$data['id_permiso']=$id_permiso;
		$data['estado_transaccion']=$estado_transaccion;
		if ($id_edicion==0) {			
			die("No existe una evaluacion activa o selecionada");
		}
//		cargando();
			switch ($accion) {
			case 1:
				$data['msj']="La evaluación ha sido guardada con exito";
				break;
			case 2:
				$data['msj']="La evaluación se ha omitido";
				break;
			case 3:
				$data['msj']="La evaluación se ha habilitado";
				break;
			default:
				$data['msj']=NULL;
				break;
		}
		

		switch ($id_permiso) {
			case 1:
			case 2:  //los que tiene asignados o su seccion			
				$id_empleado=$this->session->userdata('id_empleado');

				$data['d']=$this->evaluacion_model->empleados_asignados( $id_empleado,$id_edicion);						
				break;
			case 3:
			case 4:  //todo
				$data['d']=$this->evaluacion_model->empleados_asignados(NULL,$id_edicion);
				break;
			
			default:
				# code...
				break;
		}
		//prueba_v($data);
		pantalla('evaluacion/lista_empleados',$data);

}
function test($id_evaluacion=0, $revision=0)  //los parametros que se pasan son el id de la evaluación, y si es una revision o no 
{		$data['id_modulo']=EVALUACION;
		$id_permiso=consultar_permiso(EVALUACION);			///verificacion si tiene permisos para poder evaluar 
		$id_edicion=$this->evaluacion_model->edicion_activa();   //verificacion  si hay una edicion activa

		$data['id_permiso']=$id_permiso;
		if ($id_edicion==0) {			
			die("No existe una evaluacion activa");     ///si no hay edicion activa  se detiene el proceso
		}
		if ($id_evaluacion==0) {			
			die("Codigo de evaluación invalido");    // si el codio de la evaluacion no es provisto, se detiene el proceso
		}
		cargando();		     //muestra una barra de cargando
		$data['id_evaluacion']=$id_evaluacion;   
		
		$data['calificaciones']=$this->evaluacion_model->calificaciones();   ///se obtinen las calificaciones
		$data['capacitaciones']=$this->capacitacion_model->capacitaciones();  //se obtinen las capacitaciones de las cual podra seleccionar el evaluador
		$data['areas']=$this->capacitacion_model->areas();  // se extraen las areas de capacitaciones 
		$data['revision']=$revision;
		
		if ($revision==0) {
			$data['preguntas']=$this->evaluacion_model->get_questions($id_evaluacion); //se obtiene las preguntas segun el nivel 
																						//de cargo funcional que posea el evaluado
		}else{
			$data['preguntas']=$this->evaluacion_model->evaluacion($id_evaluacion);  // se obtienen las preguntas y respuestas 
																					//de la ultima evalaluacion realizada
		}
		
		pantalla("evaluacion/evaluacion_test",$data);   ///envia los datos a la vista y la muestra
	
	
}
function guardar_evaluacion() 
{


	//preparacion general
	$procesar_previa=$this->verificar_cambio_en_preguntas($_POST);
	$id_usuario=$this->session->userdata('id_usuario');

	$this->db->trans_start();
	
	///primera evaluacion, se guardara unicamente si hubo cambios con respecto a la segunda, tambien se verifica que no sea una revision
	if ($_POST['revision']==0) {
		$info=$_SESSION['eva_temp'];
		$info['conformidad']=0;
		$info['id_usuario']=$id_usuario;		
		$id_evaluacion_version=$this->evaluacion_model->guardar_evaluacion_version($info);
		$info['id_evaluacion_version']=$id_evaluacion_version;
		$this->guardar_respuestas($info);

	}

///guardar la ultima evaluacion realizada
	$info=$_POST;
	$info['id_usuario']=$id_usuario;		
	$id_evaluacion_version=$this->evaluacion_model->guardar_evaluacion_version($info);
	$info['id_evaluacion_version']=$id_evaluacion_version;
	$this->guardar_respuestas($info);


//guardar capacitaciones
	$capacitaciones=$_POST['capacitaciones'];
	$id_evaluacion=$_POST['id_evaluacion'];
	if (isset($capacitaciones)) {
	
		for ($i=0; $i < sizeof($capacitaciones); $i++) { 
	
		 	$info = array('id_capacitacion' => $capacitaciones[$i],
		 				 'id_evaluacion'=>$id_evaluacion);			 	
			$this->evaluacion_model->guardar_capacitacion_solicitada($info);	
		 } 			
	}

	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;

	if ($_POST['revision']==0) {
		bitacora("Realizada evaluación, guardada con id_evaluacion $id_evaluacion",3);
		ir_a('index.php/evaluacion/realizar/'.$tr.'/1');	
	}else{
		bitacora("Realizada una revision de la evaluación, guardada con id_evaluacion_version: $id_evaluacion_version",3);
		ir_a('index.php/evaluacion/inconformes/'.$tr.'/1');	
	}

	
}
function guardar_evaluacion_temp()
{			///guarda el contenido de las pregunas en el momento exacto de completar el 100% de contestadas
	$_SESSION['eva_temp']=$_POST;
	echo json_encode(array('status'=>1 ));
}
function guardar_respuestas($info)
{
	extract($info);
				for ($i=0; $i < sizeof($nota); $i++) { 
			 	$info = array('nota' => $nota[$i],
							 'justificacion'=>$justificacion[$i],
							 'id_pregunta'=>$id_pregunta[$i],
			 				 'id_evaluacion_version'=>$id_evaluacion_version);
			 	
				$this->evaluacion_model->guardar_respuesta($info);	
			 } 		
}


///esta funcion no se llama directamente por navegador sino por la function guardar_evaluacion
function verificar_cambio_en_preguntas($v2)
{
	$v1=$_SESSION['eva_temp'];
	$band=FALSE;
	for ($i=0; $i <sizeof($v2['nota']); $i++) { 
			if ($v1['nota'][$i]!=$v2['nota'][$i]) {
				$band=TRUE;
			}
	}
		return $band;
}

public function evaluacion_pdf($id_evaluacion=NULL,$ultima=1)
{
	 
	$data['calificaciones']=$this->evaluacion_model->calificaciones();
	$data['evaluacion']=$this->evaluacion_model->evaluacion2($id_evaluacion,$ultima);
	$data['empleado']=$this->evaluacion_model->get_datos_personales($id_evaluacion);
	$data['categoria']=$this->evaluacion_model->categoria_evaluacion($id_evaluacion);
	$data['base']=FALSE;
	$data['jefe']=$this->evaluacion_model->evaluador_datos($id_evaluacion);
	$data['comision']=false;
	if($data['evaluacion'][0]['version']==3){
		$data['jefe'] = array('nombre' => "COMISIÓN DE REVISIÓN ",'id_genero'=>1,'cargo'=>"EVALUADOR");
		$data['comision']=true;
	}

	//prueba_v($data);
	
	$this->mpdf->mPDF('utf-8','letter',0, '', 4, 4, 6, 6, 9, 9); //Creacion de objeto mPDF con configuracion de pagina y margenes
	$stylesheet = file_get_contents('css/style-base.css'); // Selecionamos la hoja de estilo del pdf
	//$stylesheet = file_get_contents('css/prueba.css'); // Selecionamos la hoja de estilo del pdf
	$this->mpdf->WriteHTML($stylesheet,1); //lo escribimos en el pdf
	$html=$this->load->view('evaluacion/evaluacion_doc',$data,TRUE); 
	//$this->load->view('evaluacion/evaluacion_doc',$data);
	$this->mpdf->WriteHTML($html,2); //la escribimos en el pdf
	//$html;
	$this->mpdf->Output(); /*Salida del pdf*/	
	

}
function inconformes($estado_transaccion=NULL,$accion=NULL)
{

	$data['estado_transaccion']=$estado_transaccion;
		switch ($accion) {
			case 1:
				$data['msj']="La evaluación ha sido guardada con exito";
				break;
			default:
				$data['msj']=NULL;
				break;
		}

		$data['id_modulo']=INCONFORMIDADES;
		$id_permiso=consultar_permiso(INCONFORMIDADES);		
		$id_edicion=$this->evaluacion_model->edicion_activa();
		$data['id_permiso']=$id_permiso;
		if ($id_edicion==0) {			
			die("No existe una evaluacion activa o selecionada");
		}
		$data['d']=$this->evaluacion_model->inconformes($id_edicion,TRUE);  //el paramentro TRUE es para sacar todos los inconfermes, incluso si se han revisado
		pantalla('evaluacion/lista_empleados_inconformes',$data);

}
function D_no_evaluado($id_evaluacion)
{
	$data['id_evaluacion']=$id_evaluacion;
	$data['razones']=$this->evaluacion_model->razones();
	$this->load->view('evaluacion/D_no_evaluado',$data);
}
function omitir_evaluacion()
{
		$data['id_modulo']=EVALUACION;
		$id_permiso=consultar_permiso(EVALUACION);		

	$this->db->trans_start();
	$this->evaluacion_model->omitir_evaluacion($_POST);
	$id_evaluacion=$_POST['id_evaluacion'];
	$id_razon=$_POST['id_razon'];
	bitacora("Omitida evaluación id_evaluacion $id_evaluacion por id_razon $id_razon",4);
	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/realizar/'.$tr.'/2');	
}
function reactivar_evaluacion($id_evaluacion=NULL)
{
		$data['id_modulo']=EVALUACION;
		$id_permiso=consultar_permiso(EVALUACION);	
	$info['id_evaluacion']=$id_evaluacion;
	$this->evaluacion_model->reactivar_evaluacion($info);
	bitacora("reactivada evaluación id_evaluacion $id_evaluacion",4);
	$this->db->trans_complete();
	$tr=($this->db->trans_status()===FALSE)?0:1;
	ir_a('index.php/evaluacion/realizar/'.$tr.'/3');
}

}
?>
